package learn.up.collections.hash;

/**
 * http://blog.csdn.net/ghsau/article/details/16843543
 *HashMap通过键的hashCode来快速的存取元素。
	当不同的对象hashCode发生碰撞时，HashMap通过单链表来解决，将新元素加入链表表头，
	通过next指向原有的元素。单链表在Java中的实现就是对象的引用(复合)。
 * @author NANUTO
 * @date 2017年11月29日 上午1:01:47
 */
public class MapDemo {
	/*
	 		* 来鉴赏一下HashMap中put方法源码
	 * public V put(K key, V value) {  
	    // 处理key为null，HashMap允许key和value为null  
	    if (key == null)  
	        return putForNullKey(value);  
	    // 得到key的哈希码  
	    int hash = hash(key);  
	    // 通过哈希码计算出bucketIndex  
	    int i = indexFor(hash, table.length);  
	    // 取出bucketIndex位置上的元素，并循环单链表，判断key是否已存在  
	    for (Entry<K,V> e = table[i]; e != null; e = e.next) {  
	        Object k;  
	        // 哈希码相同并且对象相同时  
	        if (e.hash == hash && ((k = e.key) == key || key.equals(k))) {  
	            // 新值替换旧值，并返回旧值  
	            V oldValue = e.value;  
	            e.value = value;  
	            e.recordAccess(this);  
	            return oldValue;  
	        }  
	    }  
	  
	    // key不存在时，加入新元素  
	    modCount++;  
	    addEntry(hash, key, value, i);  
	    return null;  
	}  */
}
